<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
<head>
    <title>LuaSQL: Conectividade de banco de dados para a linguagem de programação Lua</title>
    <link rel="stylesheet" href="doc.css" type="text/css"/>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>

<div id="container">
	
<div id="product">
	<div id="product_logo"><a href="http://www.keplerproject.org">
		<img alt="LuaSQL logo" src="luasql.png"/>
	</a></div>
	<div id="product_name"><big><strong>LuaSQL</strong></big></div>
	<div id="product_description">Conectividade de banco de dados para a linguagem de programação Lua</div>
</div> <!-- id="product" -->

<div id="main">
	
<div id="navigation">
<h1>LuaSQL</h1>
	<ul>
		<li><a href="index.html">Home</a>
		</li>
		<li><a href="manual.html">Manual</a>
		</li>
		<li><strong>Exemplos</strong></li>
		<li><a href="history.html">Histórico</a></li>
        <li><a href="https://github.com/lunarmodules/luasql">Projeto</a>
            <ul>
                <li><a href="https://github.com/lunarmodules/luasql/issues">Bug Tracker</a></li>

            </ul>
        </li>
		<li><a href="license.html">Licença</a></li>
	</ul>
</div> <!-- id="navigation" -->

<div id="content">
	
<h2><a name="examples"></a>Exemplos</h2>

<p>Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca.
Em seguida, outro exemplo mostra como criar um
<a href="#iterator_example">iterador</a> sobre o resultado de uma determinada consulta.</p>


<h3><a name="basic_use"></a>Uso básico</h3>
<pre class="example">
-- carregar o driver
require "luasql.postgres"
-- criar o objeto de ambiente
env = assert (luasql.postgres())
-- conectar a base de dados
con = assert (env:connect("luasql-test"))
-- retornar a tabela
res = con:execute"DROP TABLE people"
res = assert (con:execute[[
  CREATE TABLE people (
    name  varchar(50),
    email varchar(50)
  )
]])
-- adiciona alguns elementos
list = {
  { name="José das Couves", email="jose@couves.com", },
  { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", },
  { name="Maria das Dores", email="maria@dores.com", },
}
for i, p in pairs (list) do
  res = assert (con:execute(string.format([[
    INSERT INTO people
    VALUES ('%s', '%s')]], p.name, p.email)
  ))
end
-- obtem um cursor
cur = assert (con:execute"SELECT name, email from people")
-- imprime todos os registros, indexados pelos nomes de campos
row = cur:fetch ({}, "a")
while row do
  print(string.format("Nome: %s, E-mail: %s", row.name, row.email))
  -- reutiliza a tabela de resultados
  row = cur:fetch (row, "a")
end
-- fecha tudo
cur:close()
con:close()
env:close()
</pre>

<p>O resultado desse script será:</p>

<pre class="example">
Nome: José das Couves, E-mail: jose@couves.com
Nome: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com
Nome: Maria das Dores, E-mail: maria@dores.com
</pre>


<h3><a name="iterator_example"></a>Uso do iterador</h3>
<p>Pode ser útil oferecer um iterador para cada registro do resultado:</p>

<pre class="example">
function rows (connection, sql_statement)
  local cursor = assert (connection:execute (sql_statement))
  return function ()
    return cursor:fetch()
  end
end
</pre>

<p>Esse iterador é usado da seguinte forma:</p>

<pre class="example">
require "luasql.mysql"
env = assert (luasql.mysql())
con = assert (env:connect"my_db")
for id, name, address in rows (con, "select * from contacts") do
  print (string.format ("%s: %s", name, address))
end
</pre>

<p>Obviamente, o código acima só funciona se houver uma tabela chamadas <code>contacts</code> com as colunas apropriadas.
No final do <i>loop</i> o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.</p>

<h3><a name="To_be_closed"></a>Objetos <i>to-be-closed</i></h3>

<p>
<strong style="color: red;">Nota de Compatibilidade:</strong>
Variáveis <i>To-be-closed</i> é um recurso introduzido na versão 5.4 de Lua. Portanto, essa funcionalidade só pode ser usada se o driver LuaSQL (versão &gt; 2.6) for compilado para a versão 5.4 ou superior de Lua.
</p>

<pre class="example">
function getName(db, id)
  -- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed
  local cur &lt;close&gt; = db:execute("SELECT name FROM contacts WHERE id = " .. id)
  return cur:fetch()
end
</pre>

</div> <!-- id="content" -->

</div> <!-- id="main" -->

<div id="about">
	<p><a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
</div> <!-- id="about" -->

</div> <!-- id="container" -->

</body>
</html>
